<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <script>
            /* 
            给定一个整数数组，返回不同的递增子序列。
            首先，我们要知道，子序列类似于子集，可以跳过，不是子数组。
            但是！在子集Ⅱ中，我们的去重方式是对nums排序，然而这题求递增自然不能排序,但是也可以通过map去重
            */
            var findSubsequences = function (nums) {
                let res = []
                let map = new Map()
                function backTracking(path, startIndex) {
                    //终止条件，因为最后不含有[],所以可以添加个判断path.length>=1。因为是所有，所以不能直接return
                    if (path.length > 1) {
                        //这里有个意外！拼成字符串的时候必须加个, 不然好像有重复的，通不过测试案例
                        let str = path.join(',')
                        if (!map.has(str)) {
                            res.push([...path])
                            map.set(str)
                        }
                    }
                    for (let i = startIndex; i < nums.length; i++) {
                        //判断是否大于之前的path
                        let tail = path[path.length - 1]
                        //这里有个细节，如果undefined和其他比较，永远是false，所以如果path中没数据也要推入
                        if (path.length == 0 || nums[i] >= tail) {
                            path.push(nums[i])
                            backTracking(path, i + 1)
                            path.pop()
                        }
                    }
                }
                backTracking([], 0)
                return res
            }
        </script>
    </body>
</html>
